// 利用信号来实现两个函数轮流调用；
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#ifndef __USE_POSIX
#define __USE_POSIX
#endif
#include<signal.h>
int num=0,flag=0;

void showchang(int oldval, int newval){
    printf("%d-- to -->%d\n",oldval,newval);
}
void addtwo(int signo){
    
    showchang(num,num+2);
    flag=0;
    num +=2;
    sleep(1);
}
void addone(int signo){
    showchang(num,num+1);
    num +=1;
    flag=0;
    sleep(1);
}
int main(){
    pid_t pid = fork();
    if(pid<0){
        perror("fork error\n");
        return -1;
    }
    if(pid>0){
        flag=1;
        signal(SIGUSR1,addone);
        while(num<16){
            if(flag==0){
                kill(pid,SIGUSR2);
                flag=1;
            }
        }
        printf("父执行\n");
        waitpid(-1,NULL,0);
    }else{
        flag=0;
        signal(SIGUSR2,addtwo);
        while(num<30){
            if(flag==0){
                kill(getppid(),SIGUSR1);
                flag=1;
            }
        }
        sleep(1);
        printf("子执行\n");
    }
}
